package com.xqboss.apps.service.hama;

import cn.hutool.core.lang.Assert;
import com.xqboss.apps.domain.hama.HamaConfigNumber;
import com.xqboss.apps.enums.hama.HamaConfigNumberPeopleEnum;
import com.xqboss.apps.enums.hama.HamaConfigNumberTypeEnum;
import com.xqboss.apps.mapper.hama.HamaConfigNumberMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;

/**
 * <p>
 * 蛤蟆卡、助力人数 对应空投速度 服务实现类
 * </p>
 *
 * @author 木鱼
 * @since 2024-02-28
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class HamaConfigNumberService extends ServiceImpl<HamaConfigNumberMapper, HamaConfigNumber> {

    /**
     * 获取指定的空投速率
     *
     * 不同装备（藏品）对应的蛙星人倍率不一样； 当前用户已投的装备的数量（在空投周期内的）* 蛙星人倍率 = 真实蛙星人数量
     *
     * @param typeEnum 配置类型
     * @param peopleEnum 是否新人
     * @param WaNumber 蛙星人数量
     * @return 速率
     */
    public BigDecimal getBasicSpeed(HamaConfigNumberTypeEnum typeEnum, HamaConfigNumberPeopleEnum peopleEnum, Integer WaNumber){
        // 获取对应蛙星人数量的对应 空投力豆速率每小时
        HamaConfigNumber config=this.lambdaQuery()
                .select(HamaConfigNumber::getBasicSpeed)
                .eq(HamaConfigNumber::getType,typeEnum)
                .eq(HamaConfigNumber::getIsPeople,peopleEnum)
                .lt(HamaConfigNumber::getNumber,WaNumber+1)
                .orderByDesc(HamaConfigNumber::getNumber)
                .last("limit 1")
                .one();
        return config==null?BigDecimal.ZERO:config.getBasicSpeed();
    }

    /**
     * 获取新人的空投速率 和 天数限制
     *
     * @return 配置
     */
    public HamaConfigNumber getBasicSpeedNew(){
        // 获取新人的空投速率
        HamaConfigNumber config = this.lambdaQuery()
                .select(HamaConfigNumber::getBasicSpeed,HamaConfigNumber::getNumber)
                .eq(HamaConfigNumber::getType, HamaConfigNumberTypeEnum.TWO)
                .eq(HamaConfigNumber::getIsPeople, HamaConfigNumberPeopleEnum.NEW)
                .last("limit 1")
                .one();
        Assert.notNull(config, "新人空投速率配置不存在~");
        return config;
    }

}